=纯PCM输入和输出=
我们目前只针对输入做，输出目前是单一输出，但是是多路输入。目前，opus支持（8000/12000/16000/24000/48000）， webrtc echo支持（8000/16000/32000），所以他们的交集在8000/16000上面。但是，针对非对讲设备，我们可以使用48000的采样率。根据计算，目前最大估计只支持同时3路pcm输入打开。
以下的测试中均为单声道，其中8000Hz与16000Hz采样率使用无符号8位采样，24000Hz与48000Hz使用有符号小端16位采样，录音使用arecord进行测试，输出写入空设备(/dev/null)中，回放使用aplay进行测试，输入使用/dev/zero。ALSA的录音回放均已开启软件混音，统一使用48000Hz采样率进行混音，采样率转换模块为"samplerate_linear"，所使用的命令如下:
<pre>
arecord -f S16 -r 48000 > /dev/null
aplay -f S16 -r 48000 < /dev/zero
#若使用无符号8位采样，将S16替换为U8，使用其它采样率时将48000替换为相应的值
</pre>
==一路PCM输入==
{| class="wikitable"
! Sample rate
! Format
! CPU (%)
! CPU (w/o mixer %)
|-
| 8000
| Unsigned 8 bit, Mono
| 4.0
| 0.7
|-
| 16000
| Unsigned 8 bit, Mono
| 5.0
| 1.3
|-
| 24000
| Signed 16 bit, Mono
| 6.0
| 12.9
|-
| 48000
| Signed 16 bit, Mono
| 3.0
| 4.4
|}

===t-6005 board===
turn on alsa soft mixer
<br/>channel: 1
<br/>'''date''': Wed Jun 19 20:42:17 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''10s
<br/>'''Source:'''linphone/scripts/do_alsa_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 4.4, avg cpu: 4.20
|-
| 16000
| max cpu: 5.9, avg cpu: 5.65
|-
| 24000
| max cpu: 6.0, avg cpu: 6.00
|-
| 32000
| max cpu: 7.8, avg cpu: 7.50
|-
| 48000
| max cpu: 4.0, avg cpu: 2.55
|}
'''Notice: It includes file read/write time'''

<br/>
<br/>
turn on alsa soft mixer
<br/>channel = 2
<br/>'''date''': Wed Jun 19 20:49:35 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''10s
<br/>'''Source:'''linphone/scripts/do_alsa_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 3.0, avg cpu: 2.50
|-
| 16000
| max cpu: 5.9, avg cpu: 5.25
|-
| 24000
| max cpu: 5.9, avg cpu: 5.65
|-
| 32000
| max cpu: 7.9, avg cpu: 7.25
|-
| 48000
| max cpu: 1.2, avg cpu: .60
|}
'''Notice: It includes file read/write time'''


<br/>
<br/>
turn off alsa soft mixer
<br/>channel = 1
<br/>'''date''': Wed Jun 19 20:45:02 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''10s
<br/>'''Source:'''linphone/scripts/do_alsa_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 1.0, avg cpu: .50
|-
| 16000
| max cpu: 1.4, avg cpu: .70
|-
| 24000
| max cpu: 13.6, avg cpu: 13.40
|-
| 32000
| max cpu: 3.9, avg cpu: 3.45
|-
| 48000
| max cpu: 4.4, avg cpu: 4.15
|}
'''Notice: It includes file read/write time'''

<br/>
<br/>
turn off alsa soft mixer
</br> channel = 2
<br/>'''date''': Wed Jun 19 20:47:07 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''10s
<br/>'''Source:'''linphone/scripts/do_alsa_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 2.0, avg cpu: 1.10
|-
| 16000
| max cpu: 0.4, avg cpu: .20
|-
| 24000
| max cpu: 19.6, avg cpu: 19.55
|-
| 32000
| max cpu: 0.8, avg cpu: .40
|-
| 48000
| max cpu: 2.0, avg cpu: 1.50
|}
'''Notice: It includes file read/write time'''
~

==一路PCM输入，一路PCM输出==
{| class="wikitable"
! Sample rate
! CPU (%)
|-
| 8000，8000
| 4.3, 8.3
|-
| 8000，16000
| 4.3, 8.5
|-
| 8000，24000
| 4.3, 8.9
|-
| 8000，48000
| 4.3, 3.6
|-
| 16000，8000
| 5.0, 8.3
|-
| 16000，16000
| 5.0, 8.6
|-
| 16000，24000
| 5.0, 9.0
|-
| 16000，48000
| 5.0, 4.0
|-
| 24000，8000
| 6.0, 8.3
|-
| 24000，16000
| 6.0, 8.6
|-
| 24000，24000
| 6.0, 8.9
|-
| 24000，48000
| 6.0, 4.0
|-
| 48000，8000
| 3.0, 8.3
|-
| 48000，16000
| 3.0, 8.6
|-
| 48000，24000
| 3.0, 8.9
|-
| 48000，48000
| 3.0, 3.6
|}

<br/>
<br/>
turn off ALSA soft mixer, run record and play at the same time
<br/>channel=2
<br/>'''date''': Thu Jun 20 10:27:30 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''10s
<br/>'''Source:'''linphone/scripts/do_alsa_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 0.2, avg cpu: .10
|-
| 16000
| max cpu: 0.2, avg cpu: .10
|-
| 24000
| max cpu: 19.9, avg cpu: 19.45
|-
| 48000
| max cpu: 1.0, avg cpu: .50
|}
'''Notice: It includes file read/write time'''
<br/>
<br/>'''date''': Thu Jun 20 10:27:29 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''10s
<br/>'''Source:'''linphone/scripts/do_alsa_output_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 0, avg cpu: 0
|-
| 16000
| max cpu: 0, avg cpu: 0
|-
| 24000
| max cpu: 17.9, avg cpu: 17.25
|-
| 48000
| max cpu: 2.0, avg cpu: 1.00
|}
'''Notice: It includes file read/write time'''

==两路PCM输入==
{| class="wikitable"
! Sample rate
! CPU (%)
|-
| 8000，8000
| 9.3
|-
| 8000，16000
| 10.0
|-
| 8000，24000
| 11.0
|-
| 8000，48000
| 8.0
|-
| 16000，16000
| 10.0
|-
| 16000，24000
| 11.0
|-
| 16000，48000
| 8.0
|-
| 24000，24000
| 12.0
|-
| 24000，48000
| 9.0
|-
| 48000，48000
| 6.0
|}

==二路PCM输入，一路PCM输出==
{| class="wikitable"
! Sample rate (2 in, 1 out)
! CPU (%)
|-
| 8000，8000，8000
| 8.6, 8.3
|-
| 8000，8000，16000
| 8.6, 8.3
|-
| 8000，8000，24000
| 8.6, 8.6
|-
| 8000，8000，48000
| 8.6, 4.0
|-
| 8000，16000，8000
| 9.0, 8.3
|-
| 8000，16000，16000
| 9.0, 8.6
|-
| 8000，16000，24000
| 9.0, 8.9
|-
| 8000，16000，48000
| 9.0, 3.6
|-
| 8000，24000，8000
| 10.2, 8.3
|-
| 8000，24000，16000
| 10.2, 8.6
|-
| 8000，24000，24000
| 10.2, 8.6
|-
| 8000，24000，48000
| 10.2, 3.6
|-
| 8000，48000，8000
| 7.3, 8.3
|-
| 8000，48000，16000
| 7.3, 8.6
|-
| 8000，48000，24000
| 7.3, 8.6
|-
| 8000，48000，48000
| 7.3, 3.6
|-
| 16000，16000，8000
| 10.6, 8.3
|-
| 16000，16000，16000
| 10.6, 8.6
|-
| 16000，16000，24000
| 10.6, 8.6
|-
| 16000，16000，48000
| 10.6, 3.6
|-
| 16000，24000，8000
| 11.0, 8.3
|-
| 16000，24000，16000
| 11.0, 8.6
|-
| 16000，24000，24000
| 11.0, 8.9
|-
| 16000，24000，48000
| 11.0, 3.6
|-
| 16000，48000，8000
| 8.0, 8.3
|-
| 16000，48000，16000
| 8.0, 8.6
|-
| 16000，48000，24000
| 8.0, 8.9
|-
| 16000，48000，48000
| 8.0, 3.6
|-
| 24000，24000，8000
| 12.0, 8.3
|-
| 24000，24000，16000
| 12.0, 8.6
|-
| 24000，24000，24000
| 12.0, 8.9
|-
| 24000，24000，48000
| 12.0, 3.6
|-
| 24000，48000，8000
| 9.0, 8.3
|-
| 24000，48000，16000
| 9.0, 8.6
|-
| 24000，48000，24000
| 9.0, 8.9
|-
| 24000，48000，48000
| 9.0, 3.6
|-
| 48000，48000，8000
| 6.0, 8.3
|-
| 48000，48000，16000
| 6.0, 8.6
|-
| 48000，48000，24000
| 6.0, 8.9
|-
| 48000，48000，48000
| 6.0, 3.6
|}

==三路PCM输入==
{| class="wikitable"
! Sample rate
! CPU (%)
|-
| 8000，8000，8000
| 12.6
|-
| 8000，8000，16000
| 13.6
|-
| 8000，8000，24000
| 14.2
|-
| 8000，8000，48000
| 11.6
|-
| 8000，16000，16000
| 14.3
|-
| 8000，16000，24000
| 15.3
|-
| 8000，16000，48000
| 12.3
|-
| 8000，24000，24000
| 16.3
|-
| 8000，24000，48000
| 12.6
|-
| 8000，48000，48000
| 10.3
|-
| 16000，16000，16000
| 15.0
|-
| 16000，16000，24000
| 15.6
|-
| 16000，16000，48000
| 13.0
|-
| 16000，24000，24000
| 17.0
|-
| 16000，24000，48000
| 14.1
|-
| 16000，48000，48000
| 16.0
|-
| 24000，24000，24000
| 18.0
|-
| 24000，24000，48000
| 15.0
|-
| 24000，48000，48000
| 12.0
|-
| 48000，48000，48000
| 9.0
|}

=avahi-daemon=
他可能不是一直在占用，可能需要长时间看，并且针对发布，需要测试在有发现这个service的时候的cpu.
{| class="wikitable"
! 功能
! CPU (%)
|-
|发现一个service的时候
|
|-
|发布一个service的时候
|
|}

=echo=
目前，针对opus,pcma codec，和echo的属性，我们只能支持8000,16000在不resampling的情况下，所以下面的测试主要针对这两个sample rate进行。
== auto script results ==
* [[ Arm red board ]]
* [[ small development machine ]]

=codec=
==opus==
属性相关：
# sample rate: 8000/12000/16000/24000/48000. 我们只真多8000,16000和48000
# opus mode: OPUS_APPLICATION_VOIP/OPUS_APPLICATION_AUDIO/OPUS_APPLICATION_RESTRICTED_LOWDELAY
# opus complexity: 1 - 10. currently, 2. 可以尝试使用1
# bandwidth: 
## OPUS_BANDWIDTH_NARROWBAND            1101 /**< 4 kHz bandpass
## OPUS_BANDWIDTH_MEDIUMBAND            1102 /**< 6 kHz bandpass
## OPUS_BANDWIDTH_WIDEBAND              1103 /**< 8 kHz bandpas
##　OPUS_BANDWIDTH_SUPERWIDEBAND         1104 /**<12 kHz bandpass
## OPUS_BANDWIDTH_FULLBAND              1105 /**<20 kHz bandpass
# signal: 
## OPUS_SIGNAL_VOICE
## OPUS_SIGNAL_MUSIC
# bitrate:
## 8
## 16
## 32
## 64
## 128
## 256
## 512
## 768

系统改用了自动测试script,生成的结果在这里
* [[virtual box linphone opus result]]
* [[Arm machine with dev board(red)]]
* [[xijing small dev machine ]]

=background detection=
主要根据sample rate: 8000, 16000, 32000, 48000和多少路输入有关，目前只针对算法本身进行测量。

== test 1 on arm red board ==
我们直接从pcm file里面读取pcm数据，然后做数字运算。cpu使用包括file operation.

<br/>'''date''': Wed Jun 19 18:46:12 CST 2013
<br/>'''OS:'''Linux arm 3.2.0-luna_itc+ #136 Wed Jun 5 19:56:32 CST 2013 armv7l armv7l armv7l GNU/Linux
<br/>'''time to measure:'''30s
<br/>'''Source:'''linphone/scripts/do_vol_detect_test.sh
{| class=wikitable
|-
! Sample rate
! CPU (%)
|-
| 8000
| max cpu: 2.2, avg cpu: .66
|-
| 16000
| max cpu: 2.0, avg cpu: .73
|-
| 32000
| max cpu: 0.6, avg cpu: .46
|-
| 48000
| max cpu: 1.0, avg cpu: .56
|}
'''Notice: It includes file read/write time'''

=mpg123编译=
使用最新版的mpg123，开启NEON支持
<pre>
export CFLAGS="-O2 -march=armv7-a -marm -mfpu=neon -funsafe-math-optimizations -pipe -ffast-math -fomit-frame-pointer -mtune=cortex-a8 -mfloat-abi=hard"
./configure --with-optimization=3 --with-cpu=neon --with-audio=alsa --with-default-audio=alsa
make && make install
</pre>
开启软件混音时，测试后可使用接近100%的CPU
关闭软件混音时，测试中使用10% CPU
=Ruby客户端优先级调整=
将Ruby客户端的优先级调整至19(最低)可稍提升linphone端的响应速度
=pcma and webrtc quality test=